home *** CD-ROM | disk | FTP | other *** search
/ LSD Docs / LSD Docs.iso / FILEZ / lsd09.dms / lsd09.adf / 69 / 69
Text File  |  1989-08-11  |  24KB  |  496 lines

  1.                         Zoom/ZoomCheck 3.10
  2.  
  3. A  floppy disk tracking and archiving utility, written by Olaf 'Olsen'
  4. Barthel    of    MXM.     ©   Copyright   1990   by   MXM,   Lh   data
  5. compression/decompression code © Copyright 1990 by Holger P.  Krekel &
  6. Olaf  Barthel.   Shareware,  all rights reserved.  No guarantee of any
  7. kind  is  made that the program(s) described in this document are 100%
  8. reliable.  You use this material on your own risk.
  9.  
  10. CONTENTS
  11. This  package  consists of six files.  The CRC checksums were obtained
  12. using  the  `CRC'  utility  (also included in this package).  Provided
  13. that  all checksums match the following samples (and this document has
  14. not been modified) no file is virus-infected.
  15.  
  16.                    Zoom           (CRC = $78C97789)
  17.                    Zoom.info
  18.                    ZoomCheck      (CRC = $82C1C0BD)
  19.                    ZoomCheck.info
  20.                    CRC            (CRC = $B9819FE8)
  21.                    Zoom.doc
  22.  
  23. Why use Zoom! instead of other disk compression utilities?
  24.  
  25.    - Zoom!   performs much faster and compresses better than any other
  26.      currently available disk archiving utility.
  27.    - Zoom!  recognizes about 66 different viruses.
  28.    - Zoom!  has both an Intuition and a Shell interface.
  29.    - Zoom!  can be customized for your own needs.
  30.    - Zoom!  works with Kickstart 2.x!
  31.    - Zoom!   will  also  work  with  an MC68020/30.  No need to buy an
  32.      extra version!
  33.  
  34. Purpose
  35. Disk archiving utilities are becoming increasingly attractive.  Almost
  36. all  other disk compression tools lack a friendly user interface, take
  37. ages to finish their work or simply produce very long output files.
  38.    Zoom!   is  the successor to CompDisk and owes much to the original
  39. tool's design.  Nevertheless, Zoom!  performs faster, produces `safer'
  40. and much smaller output files.
  41.    Zoom!   uses  highly-efficient  data encoding routines derived from
  42. LhArc  (adaptive  Huffman  squeezing)  which  have been converted into
  43. MC680x0  code  (we  call  it `Lh').  Data compression/decompression is
  44. always  much  faster  than displayed by programs such as Warp, LhWarp,
  45. LhArc and LZ.
  46.    To reduce the chance of encoding a virus-infected disk, Zoom!  will
  47. examine  the  bootblock  and  display it if it is of nonstandard type.
  48. The following 66 different bootblock viruses are recognized:
  49.  
  50.          16 Bit Crew      AEK (MicroMaster)           AIDS
  51.         Alien New Beat        Amigafreak      Australian Parasite
  52.            BamigaS1          Black Flash            Butonics
  53.      Byte Bandit (1 & 2) Byte Warrior (1 & 2)     CCCP (1 & 2)
  54.       ClaasAbraham (MCA)     CList Virus             Coder
  55.              DAG              Destructor       DiskDoctor (1 - 3)
  56.        Digital Emotion      Diskguard V1.0          F.A.S.T.
  57.            F.I.C.A.             Forpib              Gadaffi
  58.            Graffiti            Gremlins             GX Team
  59.              ICE              Incognito               JITR
  60.         Joshua (1 & 2)    Julie (Tick Virus)         Kauki
  61.          LAMER (1 - 3)           LSD               Megamaster
  62.          Microsytems         Morbid Angel           Obelisk
  63.             OPAPA           Phantastograph            Rene
  64.            REVENGE         REV. Boot Loader       SCA (1 & 2)
  65.            Scarface           Selfwriter           Sendarian
  66.       Sinister Syndicate     Supply Team           Switch OFF
  67.             Target            Termigator         The INCOGNITO
  68.            TIMEBOMB              TURK           U.K. Lamerstyle
  69.            Ultrafox            Warhawk
  70.  
  71.    Ralf  Thanner,  author of the `Berserker' virus killer, donated the
  72. bootblock scanner and rewrote the 16-bit CRC routines, thanks a lot!
  73.  
  74. Installation
  75. Copy `arp.library' to your LIBS:  directory, both Zoom!  and ZoomCheck
  76. require  it.   ENV:   (default AmigaDOS environment storage directory)
  77. should be assigned to somewhere, but needn't.
  78.  
  79. Zoom! Shell usage
  80. The following command line template is displayed if you type `Zoom ?':
  81.  
  82.  From,To,Check/K,T=Text/K,S=Start/K,E=End/K,C=Crypt/K,D=ClearData/S,
  83.            B=ClearBlocks/S,V=Verify/S,Q=Quiet/S,Selftest/S
  84.  
  85. From .......... Name  of  the file to be read and written back to disk
  86.                 (`decode')  or  the  name of the filing device to read
  87.                 the data from to be encoded.
  88.  
  89.                 Examples: `Zoom from df0: to ram:doodle'
  90.                           `Zoom from ram:doodle to df0:'
  91.  
  92. To ............ Name of the device to store the decoded data on or the
  93.                 name of the file to send the encoded data to.
  94.  
  95. Check ......... This  is  a  tiny  implementation  of a file integrity
  96.                 testing  tool  (such as  `ZoomCheck').  A file created
  97.                 by  Zoom!  will be read and tested.  If  a checksum is
  98.                 not  in  its  correct  place  an error message will be
  99.                 displayed.
  100.  
  101.                 Example: `Zoom check ram:doodle'
  102.  
  103. Text .......... Zoom!  can attach a text file to an archive file which
  104.                 will be displayed while/before data decoding. It  will
  105.                 be read and encoded before the  actual  disk  encoding
  106.                 will take place.
  107.  
  108. Start ......... The  track number to start encoding at.  This argument
  109.                 is  optional  and  does  not  need  to be entered.  By
  110.                 default the starting track is zero (= 0).
  111.  
  112.                 Example: `Zoom df0: to ram:dodo start 17 end 22'
  113.  
  114. End ........... The number of the last track to encode.  Note that you
  115.                 cannot  ask  for  a starting track and omit the ending
  116.                 track  (and the other way round).  Both arguments must
  117.                 be used.
  118.  
  119. Crypt ......... Files  created  by  Zoom!   may  be  encrypted  with a
  120.                 special  password.   The  same  password (Note:  it is
  121.                 case  sensitive) will be required to decode the output
  122.                 file.
  123.  
  124.                 Example: `Zoom df0: to ram:doodle crypt Secret'
  125.  
  126. Cleardata ..... This  switch  may  reduce  the size of the output file
  127.                 produced by encoding.  Under the `old' filing system a
  128.                 data  block  contains  the  number  of bytes which are
  129.                 actually occupied by data.  The rest of the data block
  130.                 usually  contains  random  data.   If  this  switch is
  131.                 active  the  unused  portion of the data block will be
  132.                 set  to  zero.  Note:  due to the different data block
  133.                 format  this  switch  has  no effect if used on a disk
  134.                 formatted by the fast filing system.
  135.  
  136. Clearblocks ... Not  all  blocks of a disk may be actually occupied by
  137.                 data.   Zoom!  uses the disk Bitmap to determine which
  138.                 blocks  to  read and to encode.  By default the Bitmap
  139.                 is  ignored.   This  switch  will cause Zoom!  to skip
  140.                 unused  blocks.   Note:  this feature will be disabled
  141.                 if the disk to be encoded is not a valid AmigaDOS disk
  142.                 with  a  properly  initialized  root/boot  block and a
  143.                 valid  Bitmap  flag.  Also important:  this switch has
  144.                 no  effect if a set of tracks is to be encoded instead
  145.                 of the default 0..79.
  146.  
  147. Verify ........ Each  write  access  to  disk will be verified if this
  148.                 switch  is  active.  The actual data verification will
  149.                 be  handled  by the blitter, so it won't slow down the
  150.                 decoding process too much.
  151.  
  152. Selftest ...... This  shell  option was added to help you to verify if
  153.                 your  Zoom!   program  has  been  infected by a virus.
  154.                 Zoom!   will  examine  its internal hunk structure and
  155.                 complain  if  a  hunk  is  not in its standard size or
  156.                 place.   These  are conditions which can, but need not
  157.                 indicate  link  virus infection.  While this technique
  158.                 does  not  entirely  prevent  the  creation  of trojan
  159.                 horse-versions of Zoom!  or that an extremely `clever'
  160.                 virus infects Zoom!, it will probably catch all `dumb'
  161.                 link  viruses  which  put their virus code in front of
  162.                 the first hunk or behind the last hunk of a program.
  163.  
  164. Zoom! Workbench usage
  165. If  called  from  Workbench  (or  from  Shell without any arguments) a
  166. window  will  pop  up under the mouse pointer containing the following
  167. gadgets:
  168.  
  169. Select file ........... Select   the   name   of   the   file   to  be
  170.                         encoded/decoded.   It  will  be  put  into the
  171.                         string gadget to the left of this button.
  172.  
  173. Select drive .......... Select the the drive to write/read the data to
  174.                         be  decoded/encoded to/from.  This button will
  175.                         cycle  through  all  filing  systems which are
  176.                         exactly  80  tracks  in size.  The name of the
  177.                         filing  system  will  be  put  into the string
  178.                         gadget to the left of this button.
  179.  
  180. Start data Encoding ... Click  this  button  to  start  data encoding,
  181.                         click it again to stop the process.
  182.  
  183. Start data Decoding ... Click  this  button  to  start  data decoding,
  184.                         click it again to stop the process.
  185.  
  186. From track to track ... The starting and ending tracks to encode, note
  187.                         that   this   feature   has   to  be  selected
  188.                         explicitely.
  189.  
  190. Clear unused data ..... Unused  data  in  standard  file system blocks
  191.                         will  be  set  to  zero  if  this  feature  is
  192.                         enabled.
  193.  
  194. Clear unused blocks ... Unused  blocks  will be skipped if this switch
  195.                         is  in effect.  Note:  cannot  be  mixed  with
  196.                         'from track to track'.
  197.  
  198. Verify write .......... Enables  write  verification  while data files
  199.                         are  decoded.  This switch has no effect while
  200.                         data encoding.
  201.  
  202. The  display  on the right hand side of the Zoom!  window contains the
  203. following elements:
  204.  
  205. Disk .................. The space left on the destination drive.
  206.  
  207. Mem ................... System memory currently available.
  208.  
  209. Size .................. Size  of  the  last  encoded/decoded track(s).
  210.                         Usually  two  values  will  appear  here:  the
  211.                         first one denotes the size of the buffer after
  212.                         pre-compression,  the  second  value indicates
  213.                         the final size after Lh-compression.
  214.  
  215. File .................. The size of the encoded data file.
  216.  
  217. Time .................. Time elapsed during data encoding/decoding.
  218.  
  219. Track ................. Current track counter (read / to go).
  220.  
  221. Status ................ The action currently executed.
  222.  
  223.    If  an  output  file does not fit on the destination disk, encoding
  224. wil  be  terminated.   The starting and ending tracks will be adjusted
  225. accordingly to allow the user to continue to encode the disk where the
  226. first encoding run stopped.
  227.    The  `name' of the file to be decoded may be a wildcard expression.
  228. Zoom!  will try to locate and decode all files which match the pattern
  229. (note:  only the Intuition interface supports this feature).
  230.    Multiple  selection is supported as well:  to decode a row of Zoom!
  231. output  files,  hold  down the shift-key, click the icons of files you
  232. wish to decode, then double-click the Zoom!  icon.  Note:  Zoom!  will
  233. use  the  default  options to decode the files, the online options can
  234. only be changed after all files have been processed!
  235.  
  236. The `ZOOMOPTS' environment variable
  237. The current settings displayed in the Intuition interface are saved in
  238. a  default  environment  variable  which  is read again when Zoom!  is
  239. called  again.  This variable is set both in Manx/ARP and in Workbench
  240. 1.3 format.  The following template is supported:
  241.  
  242.    File/K,Drive/K,S=Start/K,E=End/K,D=ClearData/S,B=ClearBlocks/S,
  243.                         V=Verify/S,N=NoIcons/S
  244.  
  245. File .......... The  default  string  to  appear  in  the  'File name'
  246.                 gadget.
  247.  
  248. Drive ......... The string to appear in the 'Drive' gadget.
  249.  
  250. Start ......... The first track to start data encoding with.
  251.  
  252. End ........... The last track to encode.
  253.  
  254. ClearData ..... Whether unused block data is to be zeroed or not.
  255.  
  256. ClearBlocks ... Whether unused blocks are to be skipped or not.
  257.  
  258. Verify ........ Whether write verification is enabled or not.
  259.  
  260. NoIcons ....... Set this flag if you don't want Zoom!  to create icons
  261.                 for each output file.
  262.  
  263.                     A sample `ZOOMOPTS' value is:
  264.         `FILE RAM:Blank.zom DRIVE DF0: CLEARDATA CLEARBLOCKS'
  265.  
  266. ZoomCheck
  267. Zoom!   comes  with  an  auxilary program:  ZoomCheck.  ZoomCheck will
  268. examine  the  entire structure of file created by Zoom!  and report if
  269. the  checksums  are in the correct place.
  270.    Notes  and  texts are also displayed while checking (add 'QUIET' to
  271. the command line to suppress this feature).
  272.    Notes  are  added  to a Zoom!  file with the 'NOTE' option (such as
  273. 'ZoomCheck  File.zom NOTE Hello!') or with the 'NOTEFROM' option (such
  274. as  'ZoomCheck  File.zom  NOTEFROM ENV:MyTag').  Time and date will be
  275. saved with the note (the note itself will be encrypted).
  276.    Zoom and ZoomCheck use 16-bit CRC routines which catch about 99% of
  277. possible  random  changes (I didn't see the need to use 32-bit CRCs to
  278. catch another half percent!).
  279.  
  280. ZoomCheck Workbench usage
  281. A  standard  file  requester will be opened to let you select the file
  282. you  want  to  be checked.  A different requester will tell you if the
  283. file structure was entirely correct.
  284.    While  the file is examined, notes and the text attached to it will
  285. be displayed.
  286.    Multiple  selection is supported as well:  hold down the shift key,
  287. click  the icons of the files you want to check, then double-click the
  288. ZoomCheck-icon.
  289.  
  290. ZoomCheck Shell usage
  291.      The following command line template is diplayed if you type
  292.                             `ZoomCheck ?':
  293.  
  294.             File,N=Note/K,F=NoteFrom/K,Quiet/S,Selftest/S
  295.  
  296. File .......... The  name  of the file to be tested.  The text and the
  297.                 notes  attached  to the file will be displayed  unless
  298.                 the `quiet' option is used.
  299.  
  300. Note .......... A  note  to  attach  to  the archive file.  Notes  are
  301.                 saved with their creation date and are encrypted.
  302.  
  303.                 Example: `ZoomCheck Foo Note Bar'
  304.  
  305. NoteFrom ...... Similar  to the 'Note' keyword this argument will make
  306.                 ZoomCheck  attach  a  note  to a given file.  The only
  307.                 Difference  is  that the note will be read from a file
  308.                 (CAREFUL:    the   note   cannot  be  longer  than  79
  309.                 characters, longer strings will be truncated!).
  310.  
  311.                 Example: `ZoomCheck Foo NoteFrom ENV:Bar'
  312.  
  313. Quiet ......... By  default text and notes associated with an  archive
  314.                 file   are  displayed  before  the  file  is  actually
  315.                 checked.   This  feature  can  be  disabled  with  the
  316.                 `quiet' switch.
  317.  
  318. Selftest ...... This  command  has  the  same effect as in  the  Zoom!
  319.                 main program.
  320.  
  321. Technical notes
  322. Zoom!  needs a tiny little bit of memory to perform its jobs:
  323.  
  324.                   Data Encoding ......... 240 KByte
  325.                   Data Decoding ......... 240 KByte
  326.  
  327.    Make  sure that enough space is available, or Zoom!  will complain.
  328. Note  that  disabling  write verification will save about 10 KBytes of
  329. chip memory.
  330.    The  Lh  data  encoding/decoding  routines are related to LhArc and
  331. PKZip.   Unlike common data compression/decompression routines such as
  332. employed  by  PowerPacker or Imploder, the performance of Lh cannot be
  333. downgraded  by  adjusting  the data sequence search depth.  This means
  334. that Lh will always encode trying to achieve the best results with the
  335. maximum effort.
  336.  
  337. How fast Zoom! works
  338. I  suppose  you  are shocked by the amount of memory required for data
  339. compression / decompression.  Well, as it turns out I traded speed for
  340. memory.   I  tested  Zoom!  (encoding a disk) against DMS 1.02, LhWarp
  341. 1.4 and Warp 1.2a with the following results:
  342.  
  343.                             Workbench1.3D:
  344.  
  345.                 Tool   | Output file  | Duration
  346.                 -------+--------------+--------------
  347.                 Warp   | 508226 bytes | 11:49 minutes
  348.                 LhWarp | 399187 bytes | 16:39 minutes
  349.                 DMS    | 389270 bytes | 11:00 minutes
  350.                 Zoom!  | 371432 bytes |  6:15 minutes
  351.  
  352.    There you are:  Zoom!  really IS faster and more efficient than any
  353. currently  available  disk  compression  /  decompression  program.  I
  354. wouldn't  call  Zoom!   `lightning fast' (Jon Forbes has a license for
  355. that ;-), but I am sure that it will show a `few' tools home!
  356.  
  357. Known problems
  358. Some  features  supported  by  CompDisk/DecompDisk are not included in
  359. Zoom!   and  ZoomCheck  yet  and probably never will (which depends on
  360. your support).  Currently known bugs and problems are:
  361.  
  362. - Sector  labels  are not saved yet.  Very few applications apparently
  363.   use  them (FFS is rumored to do so, but I couldn't find any evidence
  364.   yet).   Supporting  SecLabels would require two write accesses for a
  365.   single track (yet another bug in the pre-2.x trackdisk.device?!?).
  366.  
  367. Credits
  368. Credits  go  to  Arp  Programmers  for  Arp  1.3, to Ralf Thanner, who
  369. contributed   the  assembly  language  crc  routines  and  the  custom
  370. bootblock  check,  to  Erik Løvendahl Sørensen for the large number of
  371. viruses  he  sent  to  Ralf  and  to  K.  Wiesel  who  contributed the
  372. pre-compression code.
  373.  
  374. Author's request and Share-Ware fee
  375. Zoom!   and  ZoomCheck  are  released  as Share-Ware.  If you like the
  376. programs and use them frequently, please dig into your pocket and send
  377. a  contribution of at least DM 50,- or 35$ US (DM currently preferred)
  378. to:
  379.  
  380.                           Olaf Barthel, MXM
  381.                           Brabeckstrasse 35
  382.                           D-3000 Hannover 71
  383.  
  384.                      Federal Republic of Germany
  385.  
  386.    This program was made available for you convenience, so if you like
  387. and  use it, don't just think `well, what the h*ck, some guy will send
  388. some  money - I'll better keep my bucks, who says that Olsen will even
  389. answer  my  letter?'.   Without  your support  there  may be no future
  390. revisions of Zoom!
  391.    A  registered  user will receive the next two major program updates
  392. free of charge.
  393.    If  an  error  shows  up,  do not hesitate to contact me as soon as
  394. possible.  My `real world' adress is given above, the following are my
  395. EMail addresses:
  396.  
  397.                       Z-Net: O.BARTHEL@A-Link-H
  398.                       Fido:  Olaf Barthel@2:247/200
  399.  
  400.    The  entire  Zoom!   package  may be noncommercially redistributed,
  401. provided  that the package is always distributed in its complete form.
  402. A  small  copy  fee for media costs is okay but any kind of commercial
  403. distribution is strictly forbidden!
  404.    Comments  and suggestions how to improve this program are generally
  405. appreciated!
  406.  
  407. Revision history (most recent change first)
  408. V3.10   Changed  the  minimum sequence length LhEncode uses to 2 bytes
  409.         which  will  cause  Zoom!   to emit even smaller output files.
  410.         Thanks  to Holger's brilliant LhDecode routine the file format
  411.         is still compatible with the previous  releases.  If  encoding
  412.         was cancelled a  previously  allocated  text  buffer  was  not
  413.         released (this has been fixed).
  414.  
  415. V3.9    The  previous  release  had problems if ENV:  was not assigned
  416.         (sorry  to  all those who nearly got mad at this - don't blame
  417.         me, blame Manx!).
  418.            The disk drives to support this feature will eject the disk
  419.         after encoding/decoding (such as the  Applied  Engineering  HD
  420.         disk drive).
  421.            A  text file to be encoded along with a disk is read before
  422.         the actual disk encoding takes place.
  423.            If  started  from Workbench Zoom saves icon images with the
  424.         files it creates.
  425.            If  a  disk is accidentally removed while encoding/decoding
  426.         Zoom!   will  no longer refuse to continue work after the disk
  427.         has been reinserted.
  428.            The   older   release  could  clear  the  contents  of  the
  429.         `ZOOMOPTS' variable after running Zoom!  from Shell.
  430.            Zoom!   and ZoomCheck have been recompiled with our (Oliver
  431.         Paesler's  and  my)  new  SAS/C compiler (sorry Manx, I really
  432.         could't  take  it  any  more!).   Some  real  voodoo magic was
  433.         involved in creating a truly reentrant Arp wrapper package for
  434.         the  darn  startup  code,  but,  alas I am not a perfect SAS/C
  435.         priest  yet:   starting  the  Zoom!   Intuition interface from
  436.         Shell  will  cause  the program to modify its own data hunk (I
  437.         have  checked  any  location  but  couldn't  discover where it
  438.         actually  happens).  This nuisance does not occur if Zoom!  is
  439.         started from Shell using the Shell interface only.  Both Zoom!
  440.         and ZoomCheck support multiple icon selection.
  441.            ZoomCheck  will  read  notes  from  a file.  I reworked the
  442.         compression code a bit.
  443.            The documentation was rearranged and partly rewritten  (the
  444.         original  file  was  as  close  to  a  long-run-midnight-near-
  445.         delirium-hack as it could possibly be).
  446.            I   forgot   to  describe  the  format  of  the  `ZOOMOPTS'
  447.         environment  variable.   The  power LED will no longer flicker
  448.         during    encoding/decoding    (another   `benefit'   of   the
  449.         Manx<->SAS/C conversion).
  450.            My  old  UUCP/SubNet addresses have ceased to exist, I will
  451.         try  to supply an alternative gateway path if anybody needs it
  452.         (use Fido or standard snail instead).
  453.  
  454. V3.7    This  is  a  kludge  solution:  I  use  rstart.o to create the
  455.         resident  part  of  Zoom!   and ZoomCheck:  both programs will
  456.         only  be  reentrant if used in conjunction with the Arp shell.
  457.         This  release  includes  a data precompressor which provides a
  458.         welcome  speedup  for  large  rows  of  equal bytes.  The data
  459.         format is no longer compatible with previous Zoom!  releases.
  460.  
  461. V2.6    Both  Zoom and ZoomCheck have become reentrant (don't say that
  462.         you didn't think it was possible with Aztec 'C' 5.0!).
  463.  
  464. V2.3    Added  new Shell  options, fixed a couple of bugs and added an
  465.         option  to protect files by passwords.  The settings displayed
  466.         in  the Intuition interface are saved in environment variables
  467.         (both Manx standard and AmigaDOS 1.3 environment variables are
  468.         supported).   Restarting  Zoom  will  cause  it to restore the
  469.         previously  saved  settings.   Note  that  only  the Intuition
  470.         interface will read these defaults, the Shell interface always
  471.         uses the default settings.  The disk drive motor is turned off
  472.         while  data  is encoded/decoded/written (TrackSalve used to do
  473.         this job under Kick1.3, but wouldn't do under Kick2.x!).
  474.  
  475. V2.2    Added  a  couple  of  new  options  to  Zoom!, such as a small
  476.         ZoomCheck.    Texts   and   notes  are  displayed  after/while
  477.         decompression  and  also  appear  in  the  Shell  window.  The
  478.         ZoomNote functions have moved into ZoomCheck.
  479.  
  480. V2.1    Added  back  the  dreaded  command line interface.  Also added
  481.         wildcard support for decompression (intuition interface only).
  482.         There's a new support file:  ZoomNote.
  483.  
  484. V2.0    Better   FFS  support,  Zoom!   has  become  faster  and  more
  485.         efficient.   This  release is incompatible with previous Zoom!
  486.         releases.
  487.  
  488. V1.1    New  user  interface!   Thanks to Holger, Ralf & Michael a few
  489.         bugs  were traced (and fixed?). Added write verification and a
  490.         few more gimmicks.  The docs were partly rewritten, as was the
  491.         program.
  492.  
  493. V1.0    First semi-public release.
  494.  
  495. end.
  496.